#
# Makefile
#

# 指定编译器
CC = arm-linux-gcc

# 如果未定义 LVGL_DIR_NAME，则默认为 lvgl
LVGL_DIR_NAME ?= lvgl

# 获取当前目录作为 LVGL_DIR 的值
LVGL_DIR ?= ${shell pwd}

# 编译器选项，包括优化等级、调试信息、包含目录等
CFLAGS ?= -O3 -g0   -I$(LVGL_DIR)/ -Wall  -std=gnu99

# 链接器选项，例如链接时需要的库
LDFLAGS ?= -lm -lpthread 

# 最终生成的可执行文件名
BIN = demo

# 收集要编译的文件,(在这里加入想要编译的C文件，注意要包含完整的路径)
MAINSRC = ./main.c ./res/time_display.c ./res/LED_ctrl.c ./res/weather_disply.c ./res/cJSON.c ./res/air_testing.c ./res/data_reporting.c ./res/music.c ./res/video.c ./res/LED_blink.c ./res/music1.c ./res/video1.c
#添加新路径必须加在此处，在此make一遍在注释掉用下面的CSRC来make一遍(LVGL设计BUG)


# 包含 LVGL 相关的 Makefile
include $(LVGL_DIR)/lvgl/lvgl.mk
include $(LVGL_DIR)/lv_drivers/lv_drivers.mk

# 添加额外的 C 源文件
#CSRCS += ./res/*.c  #我的函数存放所在路径
CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c

# 设置对象文件的扩展名
OBJEXT ?= .o

# 从汇编源文件生成对象文件列表
AOBJS = $(ASRCS:.S=$(OBJEXT))

# 从 C 源文件生成对象文件列表
COBJS = $(CSRCS:.c=$(OBJEXT))

# 主源文件的对象文件
MAINOBJ = $(MAINSRC:.c=$(OBJEXT))

# 定义所有源文件和对象文件
SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)
OBJS = $(AOBJS) $(COBJS)

# 默认目标
all: default

# 编译 C 源文件为对象文件的规则
%.o: %.c
	@$(CC) $(CFLAGS) -c $< -o $@
	@echo "CC $<"

# 链接对象文件生成最终的可执行文件的规则
default: $(AOBJS) $(COBJS) $(MAINOBJ)
	$(CC) -o $(BIN) $(MAINOBJ) $(AOBJS) $(COBJS) $(LDFLAGS)

# 清理构建生成的文件的规则
clean: 
	rm -f $(BIN) $(AOBJS) $(COBJS) $(MAINOBJ)